// Promise 对象用于表示一个异步操作最终的完成（或失败），及其结果值
// 成功的回调函数
// function successCallback(result) {
//     console.log("音频文件创建成功：" + result)
// }
// 失败的回调函数
// function failureCallback(error) {
//     console.log("音频文件创建失败：" + error)
// }
// createAudioFileAsync(audioSettings, successCallback, failureCallback)
// 如果函数createAudioFileAsync()被重写为返回promis的形式，那么我们可以像下面这样简单调用它：
// const promise = createAudioFileAsync(audioSettings)
// promise.then(successCallback, failureCallback);
// createAudioFileAsync(audioSettings).then(successCallback, failureCallback);

// 约定大于配置
// 在本轮事件循环运行完成之前，回调函数是不会被调用的。
// 即使异步操作已经完成（成功或失败），在这之后通过then()添加的回调函数也会被调用
// 通过多次调用then()可以添加多个回调函数，他们会按照插入顺序执行   -  链式调用（chaining）

// 链式调用
// doSomething().then(function(result) {
//     return doSomething(result);
// })
// .then(function(newResult) {
//     return doThirdThing(newResult)
// })
// .then(function(finalResult) {
//     console.log('Got thi final result: ' + finalResult);
// })
// .catch(failureCallback)
// // then里的参数是可选的，catch(failureCallback) 是 then(null, failureCallback)的缩略形式。
// doSomething().then(result => doSomething(result) )
// .then( newResult => doThirdThing(newResult) )
// .then( finalResult => console.log('Got thi final result: ' + finalResult))
// .catch(failureCallback)
// 注意，一定要有返回值，否则，callback将无法获取上一个Promise的结果。（如果使用箭头函数），
// () => x 比 () => { return x; } 更简洁一些，但后一种保留return的写法才能支持使用多个语句

// catch的后续链式操作 
// 有可能会在一个回调失败之后继续使用链式操作，即使用一个catch。这对于在链式操作中抛出一个失败之后，再次进行新的操作很有用
new Promise((resolve, reject) => {
    console.log("初始化");
    resolve();
})
.then(() => {
    throw new Error('有哪里不对了');
    console.log('执行[这个]')
})
.catch(() => {
    console.log('执行[那个]');
})
.then(() => {
    console.log('执行「这个」，无论前面发生了什么')
})


